﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using DTO;
using DAL;

namespace BLL
{
    public class HoaDonBLL
    {
        #region Khai báo
        private HoaDonDAL _hdDAL;
        private List<HoaDonDTO> _lst;
        private HoaDonDTO hdDTO;
        #endregion

        #region Khởi tạo
        public HoaDonBLL()
        {
            _hdDAL = new HoaDonDAL();
        }
        #endregion

        #region Thêm hóa đơn
        public void ThemHoaDon(HoaDonDTO hdDTO, List<GioHangDTO> lstGioHangDTO)
        {
            try
            {
                _hdDAL.ThemHoaDon(hdDTO, lstGioHangDTO);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region GetListHoaDonMotKhachHang
        public List<HoaDonDTO> GetListHoaDonMotKhachHang(string makhachhang)
        {
            try
            {
                return _hdDAL.GetListHoaDonMotKhachHang(makhachhang);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region GetHoaDonMotKhachHangVaoGioHang
        public List<GioHangDTO> GetHoaDonMotKhachHangVaoGioHang(string mahoadon)
        {
            try
            {
                return _hdDAL.GetHoaDonMotKhachHangVaoGioHang(mahoadon);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        #endregion

        #region huyHoaDon
        public int huyHoaDon(string mahoadon)
        {
            int kq = -1;
            try
            {
                kq = _hdDAL.huyHoaDon(mahoadon);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return kq;
        }
        #endregion

        #region Phương thức lấy danh sách hóa đơn
        /// <summary>
        /// Phương thức lấy danh sách hóa đơn 
        /// </summary>
        /// <returns>List</returns>
        public List<HoaDonDTO> GetListHoaDon(DateTime tu_ngay, DateTime den_ngay)
        {
            _hdDAL = new HoaDonDAL();
            try
            {
                _lst = _hdDAL.GetListHoaDon(tu_ngay, den_ngay);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return _lst;
        }
        #endregion

        #region Phương thức lấy thông tin 1 hóa đơn theo mã hóa đơn
        /// <summary>
        /// Phương thức lấy thông tin 1 hóa đơn theo mã hóa đơn
        /// </summary>
        /// <param name="mahd"></param>
        /// <returns>HoaDonDTO</returns>
        public HoaDonDTO GetHoaDon(string mahd)
        {
            _hdDAL = new HoaDonDAL();
            hdDTO = new HoaDonDTO();

            try
            {
                hdDTO = _hdDAL.GetHoaDon(mahd);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return hdDTO;
        }
        #endregion

        #region Phương thức cập nhật tình trạng hóa đơn
        /// <summary>
        /// Phương thức cập nhật tình trạng hóa đơn
        /// </summary>
        /// <param name="hd"></param>
        /// <returns></returns>
        public int Sua(HoaDonDTO hd)
        {
            int index = -1;
            try
            {
                index = _hdDAL.Sua(hd);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return index;

        }
        #endregion

        #region Phương thức xóa 1 hóa đơn
        /// <summary>
        /// Phương thức xóa 1 hóa đơn
        /// </summary>
        /// <param name="hd"></param>
        /// <returns></returns>
        public int Xoa(HoaDonDTO hd)
        {
            int index = -1;
            try
            {
                index = _hdDAL.Xoa(hd);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return index;
        }
        #endregion

    }
}